<?php

/**
* Help_CustomSmartyApi
*
* 针对smarty驱动的自定义函数实现，自动载入。
*
* *@global
* *@access
* *@todo
*
* @category mvc
* @package  Helper
* @author           liuran <ebow@21cn.com>
* @license   http://www.php.net/license/3_01.txt     PHP License 3.0
* *@see         (function()|$varname|((module|class):(function()|$varname)) [, ...]
*/

class Helper_CustomSmartyApi {

    protected $_tpl = null;


    /**
     *    载入自定义smarty标签函数
     *
     **   @param  object $tpl  smarty 实例
     *    @return void
     *    @access public
     */
    function __construct(&$tpl) {
        $this->_tpl = $tpl;
        $tpl->register_function('url',          array(& $this, '_pi_func_url'));
        $tpl->register_function('require',          array(& $this, '_pi_func_require'));
        $tpl->register_function('widgets',          array(& $this, '_pi_func_widgets'));
        $tpl->register_function('main',          array(& $this, '_pi_func_main'));
        $tpl->register_function('header',          array(& $this, '_pi_func_header'));
        $tpl->register_function('footer',          array(& $this, '_pi_func_footer'));

    }



	// 自定义的url生成方法
    function _pi_func_url($params) {
        $controllerName = isset($params['ctl']) ? $params['ctl'] : null;
        unset($params['ctl']);
        $actionName = isset($params['act']) ? $params['act'] : null;
        unset($params['act']);
        $anchor = isset($params['anchor']) ? $params['anchor'] : null;
        unset($params['anchor']);

        $options = array('base_uri' => isset($params['base_uri']) ? $params['base_uri'] : null);
        unset($params['base_uri']);

        $args = array();
        foreach ($params as $key => $value) {
            if (is_array($value)) {
                $args = array_merge($args, $value);
                unset($params[$key]);
            }
        }

        $args = array_merge($args, $params);

        return url( $controllerName . '/' . $actionName, $args, null,  $options)  .  ( empty($anchor) ? '' : '#'.$anchor);

    }

    /*
    * usage: {require file="path/to/smarttemplate.ext" }
    * 当用户模版目录中不存在该文件的时候，自动从系统级调用，如果都不存在则输出空字符串。
    * by liuran
    * @param   array $params
    * @return  html
    *
    */
    function _pi_func_require($params)
    {
        $themefile = $params['file'];

        if (empty($themefile)) {
            return '';
        }

        $filename = Libs_ShopThemes::coverToFullPath($themefile);
		if ($filename === false){
			$filename = Libs_ShopThemes::coverToFullPath($themefile, 'system');
		}

        $context  = QContext::instance();
		if ($filename === false){
			return '';
		}else{
			return $this->_tpl->fetch($filename,  $context['cache_id'] );
		}
    }

	/*
	* 根据widgets调用相应的插件并返回该插件的相应代码。
	* TODO: 实现widget对象架构。
	*/

    function _pi_func_widgets($params)
    { 
		$widgetId = $params['id']; 
		$widgets  = new Widgets();
		
		$context = QContext::instance();
		$output = $widgets->loadItems($widgetId);
		
        return $output;
    }



    /**
     *   根据上下文输出系统流程内容。
     *   系统流程在相应的control中被赋值到view的$main变量里。
     *
     **   @param  (object objecttype|type) [$varname] [description]
     *    @return void
     *    @access public
     */
    function _pi_func_main($params)
    {
        return $this->_tpl->_tpl_vars['main'];
    }

    function _pi_func_header($params)
    {
        return $this->_tpl->_tpl_vars['header'];
    }



    function _pi_func_footer($params)
    {
        return $this->_tpl->_tpl_vars['footer'];
    }

}
?>
